import EventBus from '@/utils/EventBus';
import axios, { AxiosError } from 'axios';

// 创建一个实例
const instance = axios.create({
  baseURL: '/api',
  timeout: 5000,
});
// 请求拦截
instance.interceptors.request.use(
  (config) => {
    //   携带请求头
    const token = localStorage.getItem('token');
    if (token) {
      config.headers = config.headers || {};
      config.headers['x-auth-token'] = token;
    }
    return config;
  },
  (err) => Promise.reject(err)
);
// 响应拦截
instance.interceptors.response.use(
  (res) => {
    return res.data;
  },
  // 给错误对象约定类型，不约定也行，但是约定了避免运行的时候报错
  (err: AxiosError<IResponse<any>, any>) => {
    if (err.response?.data.errCode === 1002) {
      // 如果token值失效，返回的错误码是1002，则需要执行清除token与跳转登录的方法
      EventBus.emit('logintimeout');
      // 如果把一个 文件 使用 import 导入 说明当前这个 组件/代码 一定要依赖于 import 进行内容--紧耦合
      // 把原本必须放在这里才能实现的效果，拆分开了---解耦
    }
    Promise.reject(err);
  }
);
export default instance;
